package  main.java.leetcode.editor.cn;
//2023-07-24 13:44:21
//给定两个整数数组a和b，计算具有最小差绝对值的一对数值（每个数组中取一个值），并返回该对数值的差 
//
// 
//
// 示例： 
//
// 
//输入：{1, 3, 15, 11, 2}, {23, 127, 235, 19, 8}
//输出：3，即数值对(11, 8)
// 
//
// 
//
// 提示： 
//
// 
// 1 <= a.length, b.length <= 100000 
// -2147483648 <= a[i], b[i] <= 2147483647 
// 正确结果在区间 [0, 2147483647] 内 
// 
// Related Topics 数组 双指针 二分查找 排序 👍 74 👎 0

import java.util.Arrays;

class SmallestDifferenceLcci {
    public static void main(String[] args) {
        //创建该题目的对象方便调用
        Solution solution = new SmallestDifferenceLcci().new Solution();
    }
    //leetcode submit region begin(Prohibit modification and deletion)
class Solution {
    public int smallestDifference(int[] a, int[] b) {
        if(a.length == 1 && b.length == 1){
            return Math.abs(a[0]-b[0]);
        }
        int m = a.length;
        int n = b.length;
        Arrays.sort(a);
        Arrays.sort(b);

        long res = Long.MAX_VALUE;

        for(int i = 0,j = 0; i<m && j<n;){
            if(a[i] == b[j]) {
                return 0;
            }
            long val = a[i]-b[j];
            res = Math.min(Math.abs(val),res);

            if (val > 0) {
                j++;
            } else {
                i++;
            }
        }
        return (int) res;
    }
}
//leetcode submit region end(Prohibit modification and deletion)

}
